package com.tools.web.work.excel.poi;

import com.tools.common.object.Note;

/**
 * Excel 工作簿的类型枚举
 * */
@Note("Excel 工作簿的类型枚举")
public enum ExcelTypeEnum {

    @Note("Excel 2007 之后的版本，后缀为【.xlsx】，最大可容纳 1048576 行、16384 列数据")
    XSSF(".xlsx"),

    @Note("Excel 2003 之前的版本，后缀为【.xls】，最大可容纳 65536 行、256 列数据")
    HSSF(".xls"),

    @Note("是 XSSF 的一个扩展，后缀名也是【.xlsx】。它用于解决大数据量的导入导出，避免内存溢出的问题。一般数据量超过 5000 就可以用了")
    SXSSF(".xlsx2");

    @Note("后缀名称")
    private final String suffix;

    ExcelTypeEnum(String suffix) {
        this.suffix = suffix;
    }

    public String getSuffix() {
        return suffix;
    }

    public boolean eq(String suffix) {
        return this.suffix.equals(suffix);
    }

    public boolean eqIgnoreCase(String suffix) {
        return this.suffix.equalsIgnoreCase(suffix);
    }

    @Override
    public String toString() {
        return this.name();
    }

    @Note("安全地根据 Excel 的后缀名获取对应的枚举实例，获取不到不会抛异常")
    public static ExcelTypeEnum getEnumSafe(String suffix) {
        switch (suffix) {
            case ".xlsx": return XSSF;
            case ".xls": return HSSF;
            case ".xlsx2": return SXSSF;
            default: return null;
        }
    }


    @Note("根据 Excel 的后缀名获取对应的枚举实例，获取不到会抛异常")
    public static ExcelTypeEnum getEnum(String suffix) {
        ExcelTypeEnum excelType = getEnumSafe(suffix);
        if(excelType == null) throw new IllegalArgumentException("不知道 " + suffix + " 是什么 Excel 的后缀名");
        return excelType;
    }
}
